package com.xinyan.service;


import com.xinyan.dto.ListPageParam;
import com.xinyan.dto.ReadPlcParam;
import com.xinyan.dto.WriteMultiPLCParam;
import com.xinyan.dto.WritePLcParam;
import com.xinyan.plc.IndexParam;
import com.xinyan.plc.RepeatParam;
import com.xinyan.plc.RepeatRunStopParam;
import com.xinyan.plc.RunParam;
import com.xinyan.vo.PLCReadResult;

import java.util.List;
import java.util.Map;

public interface MachineService {

    /**
     * 读取开关量
     *
     * @param params
     * @return
     */
    List<PLCReadResult<Boolean>> readBoolean(List<ReadPlcParam> params);

    /**
     * 写入开关量
     *
     * @param params
     */
    void writeBoolean(WritePLcParam<Boolean> params);

    /**
     * 同时写入多个开关量
     *
     * @param params
     */
    void writeMultiBool(WriteMultiPLCParam<Boolean> params);

    /**
     * 切换到手动模式
     *
     * @param ids
     */
    void hand(List<Integer> ids);

    /**
     * 切换到自动模式
     *
     * @param ids
     */
    void auto(List<Integer> ids);

    /**
     * 手动模式下启动
     *
     * @param ids
     * @return
     */
    List<Integer> handStart(List<Integer> ids);

    /**
     * 手动模式下停止
     *
     * @param ids
     * @return
     */
    List<Integer> handStop(List<Integer> ids);

    /**
     * 设置变频器频率
     *
     * @param ids
     * @param frequency
     */
    void setFrequency(List<Integer> ids, float frequency);

    /**
     * 读取变频器运行参数
     * @param ids
     * @return
     */
    List<RunParam> readRunParam(List<Integer> ids);

    RunParam readRunParamById(int id);

    IndexParam readIndexParam(int id);

    /**
     * 读取自动模式下循环参数
     * @param ids
     * @return
     */
    List<RepeatParam> readRepeatParam(List<Integer> ids);

    List<Integer> setRepeatParam(RepeatRunStopParam repeatRunStopParam);

    /**
     * 向PLC写入循环设置参数
     * @param map
     * @return
     */
    List<Integer> writeRepeatParam(Map<Integer, RepeatParam> map);

    /**
     * 写入循环参数（新版版）
     * @param repeatParam
     * @return
     */
    void writeRepeatParamByEntity(RepeatParam repeatParam, int id);

    ListPageParam readListPageParam(int id);

    RepeatParam readRepeatParamById(int i);
}
